package com.assistant.command.impl;

import com.assistant.ai.NLUModule;
import com.assistant.command.Command;
import com.assistant.core.CommandData;
import com.assistant.core.Config;
import com.assistant.system.SystemUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author Anyang
 * @version 1.0.0
 * @date 2025/10/25 05:10:59
 * @description 文本生成指令
 */
public class CreateTextCommand implements Command {
    private static final Logger logger = LoggerFactory.getLogger(CreateTextCommand.class);

    private final NLUModule nluModule;

    public CreateTextCommand(NLUModule nluModule) {
        this.nluModule = nluModule;
    }

    @Override
    public boolean supports(String action) {
        // 【已修复】Action 统一为 Config 中 Function Calling 定义的 'create_text'
        return "create_text".equals(action.toLowerCase());
    }

    @Override
    public String execute(CommandData data) {
        // prompt 字段用于携带用户希望生成的内容，例如：“写一篇关于量子计算的文章”
        String prompt = data.getPrompt();

        if (prompt.isEmpty()) {
            return "请告诉我您想要写什么，例如'写一篇关于人工智能的文章'。";
        }

        logger.info("执行指令：文本生成 -> Prompt: {}", prompt);

        try {
            String generatedText;

            // 如果 API 配置无效或启用 Mock 模式，则使用 Mock 文本。
            if (!Config.isConfigValid() || Config.ENABLE_MOCK) {
                logger.warn("【文本生成】API 配置无效或启用 Mock 模式，使用 Mock 文本。");
                generatedText = "【Mock文本】您要求撰写一篇关于“" + prompt + "”的文章。 量子计算是解决复杂问题的下一代技术，它利用量子力学中的叠加和纠缠等现象，实现了远超经典计算机的算力。";
            } else {
                // 调用 NLUModule 中新增的文本生成方法
                generatedText = nluModule.generateTextStream(prompt);
            }

            if (generatedText == null || generatedText.trim().isEmpty()) {
                return "抱歉，文本生成服务返回了空内容。";
            }

            // 2. 将生成的文本内容粘贴到当前活动窗口
            SystemUtil.pasteText(generatedText);
            logger.info("文本生成内容已成功粘贴到活动窗口。");

            // 3. 返回 LLM 提供的友好反馈（存储在 target 字段中），或者默认反馈
            String feedback = data.getTarget();
            if (feedback.isEmpty()) {
                feedback = "写好了，已经帮你粘贴了。";
            }
            return feedback;

        } catch (Exception e) {
            logger.error("执行 CreateTextCommand 失败", e);
            return "抱歉，出错了，没法帮你写。";
        }
    }
}